home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Languages / Caml Light 0.7 / Caml Light 0.7 source / src / yacc / defs.h < prev    next >
C/C++ Source or Header  |  1995-06-01  |  7KB  |  341 lines

  1. #include <assert.h>
  2. #include <ctype.h>
  3. #include <stdio.h>
  4. #ifdef __STDC__
  5. #include <stdlib.h>
  6. #endif
  7.  
  8. #ifdef macintosh
  9. #include <CursorCtl.h>
  10. #endif
  11.  
  12. #ifdef macintosh
  13. #include ":::config:m.h"
  14. #include ":::config:s.h"
  15. #else
  16. #include "../../config/m.h"
  17. #include "../../config/s.h"
  18. #endif
  19.  
  20. #ifdef MSDOS
  21. #define NO_UNIX
  22. #endif
  23. #ifdef macintosh
  24. #define NO_UNIX
  25. #endif
  26.  
  27. /*  machine-dependent definitions            */
  28. /*  the following definitions are for the Tahoe        */
  29. /*  they might have to be changed for other machines    */
  30.  
  31. /*  MAXCHAR is the largest unsigned character value    */
  32. /*  MAXSHORT is the largest value of a C short        */
  33. /*  MINSHORT is the most negative value of a C short    */
  34. /*  MAXTABLE is the maximum table size            */
  35. /*  BITS_PER_WORD is the number of bits in a C unsigned    */
  36. /*  WORDSIZE computes the number of words needed to    */
  37. /*    store n bits                    */
  38. /*  BIT returns the value of the n-th bit starting    */
  39. /*    from r (0-indexed)                */
  40. /*  SETBIT sets the n-th bit starting from r        */
  41.  
  42. #define    MAXCHAR        255
  43. #define    MAXSHORT    32767
  44. #define MINSHORT    -32768
  45. #define MAXTABLE    32500
  46.  
  47. #ifdef SIXTEEN
  48. #define BITS_PER_WORD    16
  49. #define    WORDSIZE(n)    (((n)+(BITS_PER_WORD-1))/BITS_PER_WORD)
  50. #define    BIT(r, n)    ((((r)[(n)>>4])>>((n)&15))&1)
  51. #define    SETBIT(r, n)    ((r)[(n)>>4]|=((unsigned)1<<((n)&15)))
  52. #else
  53. #define BITS_PER_WORD    32
  54. #define    WORDSIZE(n)    (((n)+(BITS_PER_WORD-1))/BITS_PER_WORD)
  55. #define    BIT(r, n)    ((((r)[(n)>>5])>>((n)&31))&1)
  56. #define    SETBIT(r, n)    ((r)[(n)>>5]|=((unsigned)1<<((n)&31)))
  57. #endif
  58.  
  59. /*  character names  */
  60.  
  61. #define    NUL        '\0'    /*  the null character  */
  62. #define    NEWLINE        '\n'    /*  line feed  */
  63. #define    SP        ' '     /*  space  */
  64. #define    BS        '\b'    /*  backspace  */
  65. #define    HT        '\t'    /*  horizontal tab  */
  66. #define    VT        '\013'  /*  vertical tab  */
  67. #define    CR        '\r'    /*  carriage return  */
  68. #define    FF        '\f'    /*  form feed  */
  69. #define    QUOTE        '\''    /*  single quote  */
  70. #define    DOUBLE_QUOTE    '\"'    /*  double quote  */
  71. #define    BACKSLASH    '\\'    /*  backslash  */
  72.  
  73.  
  74. /* defines for constructing filenames */
  75.  
  76. #ifndef MSDOS
  77. #define CODE_SUFFIX    ".code.c"
  78. #define    DEFINES_SUFFIX    ".tab.h"
  79. #define    OUTPUT_SUFFIX    ".ml"
  80. #define    VERBOSE_SUFFIX    ".output"
  81. #define INTERFACE_SUFFIX ".mli"
  82. #else
  83. #define CODE_SUFFIX    ".cod"
  84. #define    DEFINES_SUFFIX    ".h"
  85. #define    OUTPUT_SUFFIX    ".ml"
  86. #define    VERBOSE_SUFFIX    ".out"
  87. #define INTERFACE_SUFFIX ".mli"
  88. #endif
  89.  
  90. /* keyword codes */
  91.  
  92. #define TOKEN 0
  93. #define LEFT 1
  94. #define RIGHT 2
  95. #define NONASSOC 3
  96. #define MARK 4
  97. #define TEXT 5
  98. #define TYPE 6
  99. #define START 7
  100. #define UNION 8
  101. #define IDENT 9
  102.  
  103. /*  symbol classes  */
  104.  
  105. #define UNKNOWN 0
  106. #define TERM 1
  107. #define NONTERM 2
  108.  
  109.  
  110. /*  the undefined value  */
  111.  
  112. #define UNDEFINED (-1)
  113.  
  114.  
  115. /*  action codes  */
  116.  
  117. #define SHIFT 1
  118. #define REDUCE 2
  119.  
  120.  
  121. /*  character macros  */
  122.  
  123. #define IS_IDENT(c)    (isalnum(c) || (c) == '_' || (c) == '.' || (c) == '$')
  124. #define    IS_OCTAL(c)    ((c) >= '0' && (c) <= '7')
  125. #define    NUMERIC_VALUE(c)    ((c) - '0')
  126.  
  127.  
  128. /*  symbol macros  */
  129.  
  130. #define ISTOKEN(s)    ((s) < start_symbol)
  131. #define ISVAR(s)    ((s) >= start_symbol)
  132.  
  133.  
  134. /*  storage allocation macros  */
  135.  
  136. #define CALLOC(k,n)    (calloc((unsigned)(k),(unsigned)(n)))
  137. #ifdef macintosh
  138. #define FREE(x)         (SpinCursor ((short) 1), free((char*)(x)))
  139. #else
  140. #define    FREE(x)        (free((char*)(x)))
  141. #endif
  142. #define MALLOC(n)    (malloc((unsigned)(n)))
  143. #define    NEW(t)        ((t*)allocate(sizeof(t)))
  144. #define    NEW2(n,t)    ((t*)allocate((unsigned)((n)*sizeof(t))))
  145. #define REALLOC(p,n)    (realloc((char*)(p),(unsigned)(n)))
  146.  
  147.  
  148. /*  the structure of a symbol table entry  */
  149.  
  150. typedef struct bucket bucket;
  151. struct bucket
  152. {
  153.     struct bucket *link;
  154.     struct bucket *next;
  155.     char *name;
  156.     char *tag;
  157.     short value;
  158.     short index;
  159.     short prec;
  160.     char class;
  161.     char assoc;
  162.     char entry;
  163.     char true_token;
  164. };
  165.  
  166. /* TABLE_SIZE is the number of entries in the symbol table. */
  167. /* TABLE_SIZE must be a power of two.                */
  168.  
  169. #define    TABLE_SIZE 1024
  170.  
  171. /*  the structure of the LR(0) state machine  */
  172.  
  173. typedef struct core core;
  174. struct core
  175. {
  176.     struct core *next;
  177.     struct core *link;
  178.     short number;
  179.     short accessing_symbol;
  180.     short nitems;
  181.     short items[1];
  182. };
  183.  
  184.  
  185. /*  the structure used to record shifts  */
  186.  
  187. typedef struct shifts shifts;
  188. struct shifts
  189. {
  190.     struct shifts *next;
  191.     short number;
  192.     short nshifts;
  193.     short shift[1];
  194. };
  195.  
  196.  
  197. /*  the structure used to store reductions  */
  198.  
  199. typedef struct reductions reductions;
  200. struct reductions
  201. {
  202.     struct reductions *next;
  203.     short number;
  204.     short nreds;
  205.     short rules[1];
  206. };
  207.  
  208.  
  209. /*  the structure used to represent parser actions  */
  210.  
  211. typedef struct action action;
  212. struct action
  213. {
  214.     struct action *next;
  215.     short symbol;
  216.     short number;
  217.     short prec;
  218.     char action_code;
  219.     char assoc;
  220.     char suppressed;
  221. };
  222.  
  223.  
  224. /* global variables */
  225.  
  226. extern char dflag;
  227. extern char lflag;
  228. extern char rflag;
  229. extern char tflag;
  230. extern char vflag;
  231. extern char sflag;
  232. extern char big_endian;
  233.  
  234. extern char *myname;
  235. extern char *cptr;
  236. extern char *line;
  237. extern int lineno;
  238. extern int outline;
  239.  
  240. extern char *action_file_name;
  241. extern char *entry_file_name;
  242. extern char *code_file_name;
  243. extern char *defines_file_name;
  244. extern char *input_file_name;
  245. extern char *output_file_name;
  246. extern char *text_file_name;
  247. extern char *union_file_name;
  248. extern char *verbose_file_name;
  249. extern char *interface_file_name;
  250.  
  251. extern FILE *action_file;
  252. extern FILE *entry_file;
  253. extern FILE *code_file;
  254. extern FILE *defines_file;
  255. extern FILE *input_file;
  256. extern FILE *output_file;
  257. extern FILE *text_file;
  258. extern FILE *union_file;
  259. extern FILE *verbose_file;
  260. extern FILE *interface_file;
  261.  
  262. extern int nitems;
  263. extern int nrules;
  264. extern int ntotalrules;
  265. extern int nsyms;
  266. extern int ntokens;
  267. extern int nvars;
  268. extern int ntags;
  269.  
  270. extern char unionized;
  271. extern char line_format[];
  272.  
  273. extern int   start_symbol;
  274. extern char  **symbol_name;
  275. extern short *symbol_value;
  276. extern short *symbol_prec;
  277. extern char  *symbol_assoc;
  278. extern char  **symbol_tag;
  279. extern char  *symbol_true_token;
  280.  
  281. extern short *ritem;
  282. extern short *rlhs;
  283. extern short *rrhs;
  284. extern short *rprec;
  285. extern char  *rassoc;
  286.  
  287. extern short **derives;
  288. extern char *nullable;
  289.  
  290. extern bucket *first_symbol;
  291. extern bucket *last_symbol;
  292.  
  293. extern int nstates;
  294. extern core *first_state;
  295. extern shifts *first_shift;
  296. extern reductions *first_reduction;
  297. extern short *accessing_symbol;
  298. extern core **state_table;
  299. extern shifts **shift_table;
  300. extern reductions **reduction_table;
  301. extern unsigned *LA;
  302. extern short *LAruleno;
  303. extern short *lookaheads;
  304. extern short *goto_map;
  305. extern short *from_state;
  306. extern short *to_state;
  307.  
  308. extern action **parser;
  309. extern int SRtotal;
  310. extern int RRtotal;
  311. extern short *SRconflicts;
  312. extern short *RRconflicts;
  313. extern short *defred;
  314. extern short *rules_used;
  315. extern short nunused;
  316. extern short final_state;
  317.  
  318. /* global functions */
  319.  
  320. extern char *allocate();
  321. extern bucket *lookup();
  322. extern bucket *make_bucket();
  323.  
  324.  
  325. /* system variables */
  326.  
  327. extern int errno;
  328.  
  329.  
  330. /* system functions */
  331.  
  332. #ifndef __STDC__
  333.  
  334. extern void free();
  335. extern char *calloc();
  336. extern char *malloc();
  337. extern char *realloc();
  338. extern char *strcpy();
  339.  
  340. #endif
  341.